package com.ruoyi.bizsys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.bizsys.domain.CreditAccount;
import com.ruoyi.bizsys.domain.ProductInfo;

import java.math.BigDecimal;
import java.util.List;

/**
 * 授信账户Service接口
 *
 * @author african-loan
 * @date 2021-12-30
 */
public interface ICreditAccountService extends IService<CreditAccount> {
    /**
     * 查询授信账户
     *
     * @param id 授信账户ID
     * @return 授信账户
     */
    public CreditAccount selectCreditAccountById(Long id);

    /**
     * 查询授信账户列表
     *
     * @param creditAccount 授信账户
     * @return 授信账户集合
     */
    public List<CreditAccount> selectCreditAccountList(CreditAccount creditAccount);

    /**
     * 新增授信账户
     *
     * @param creditAccount 授信账户
     * @return 结果
     */
    public int insertCreditAccount(CreditAccount creditAccount);

    /**
     * 修改授信账户
     *
     * @param creditAccount 授信账户
     * @return 结果
     */
    public int updateCreditAccount(CreditAccount creditAccount);

    /**
     * 批量删除授信账户
     *
     * @param ids 需要删除的授信账户ID
     * @return 结果
     */
    public int deleteCreditAccountByIds(Long[] ids);

    /**
     * 删除授信账户信息
     *
     * @param id 授信账户ID
     * @return 结果
     */
    public int deleteCreditAccountById(Long id);

    List<CreditAccount> getOverflowAmount();

    void updateOverflowAmount(String custNo, BigDecimal overFlowAmount);

    void updateFrozenCreditAccount(String custNo, BigDecimal frozenOverFlowAmount);

    void updateOverflow(String custNo, BigDecimal overFlowAmount, BigDecimal frozenOverFlowAmount);

    /**
     * 更新授信账户额度
     *
     * @param raiseLimit
     * @param customerNo
     * @return
     */
    int updateCreditLine(BigDecimal raiseLimit, String customerNo, String adjustType);

    BigDecimal getLatestQuota(String custNo);

    /**
     * 获取正常状态，且在贷的用户信息
     *
     * @param custNo
     * @return
     */
    CreditAccount getNormalAcountOnLoan(String custNo);

    CreditAccount getByCustNo(String custNo);

    /**
     * 解除用户冻结额度
     *
     * @param custNo
     * @param unfreezeQuota 解冻的额度
     */
    boolean unfreezeQuota(String custNo, BigDecimal unfreezeQuota);

    int updateFrozenQuota(String custNo, BigDecimal frozenQuota);

    void updateCreditAccountRest(CreditAccount creditAccount);

    /**
     * 是否授信
     * @param custNo
     * @return
     */
    boolean isCredit(String custNo);

    List<ProductInfo> selectCreditAccountProduct(String custNo);

    /**
     * 获取有绑卡的再代的账户
     * @return
     */
    List<CreditAccount> getOnLoanCreditAccountsHasCard();
}
